home *** CD-ROM | disk | FTP | other *** search
/ Collection of Internet / Collection of Internet.iso / infosrvr / doc / www_talk.arc / 000192_connolly@imagine.convex.com _Fri Jul 24 17:33:12 1992.msg < prev    next >
Internet Message Format  |  1992-11-30  |  21KB

  1. Return-Path: <connolly@imagine.convex.com>
  2. Received: from dxmint.cern.ch by  nxoc01.cern.ch  (NeXT-1.0 (From Sendmail 5.52)/NeXT-2.0)
  3.     id AA25174; Fri, 24 Jul 92 17:33:12 MET DST
  4. Received: by dxmint.cern.ch (dxcern) (5.57/3.14)
  5.     id AA04630; Fri, 24 Jul 92 17:33:05 +0200
  6. Received: from imagine.convex.com by convex.convex.com (5.64/1.35)
  7.     id AA02942; Fri, 24 Jul 92 10:32:17 -0500
  8. Received: from localhost by imagine.convex.com (5.64/1.28)
  9.     id AA26087; Fri, 24 Jul 92 10:32:15 -0500
  10. Message-Id: <9207241532.AA26087@imagine.convex.com>
  11. To: cni-arch@uccvma.bitnet
  12. Cc: wais-talk@think.com, www-talk@nxoc01.cern.ch
  13. Subject: SGML for URLs
  14. Mime-Version: 1.0
  15. Content-Type: multipart/mixed; boundary="cut-here"
  16. Date: Fri, 24 Jul 92 10:32:14 CDT
  17. From: Dan Connolly <connolly@imagine.convex.com>
  18.  
  19. --cut-here
  20. Content-Type: multipart/alternamtive; boundary=alt
  21.  
  22. --alt
  23.  
  24.                                    OBJECTIVE
  25.                                        
  26.    The issue of what to call these things we're defining has been discussed at
  27.    length. First it was Universal Document Identifier. The name has changed as
  28.    the objective has been refined. The latest name is Universal Resource
  29.    Locator. The provisional charter is;
  30.    
  31.     To define a printable string syntax to the allow
  32.     
  33.       The expression of the address on the network of any accesable object
  34.       using existing information retrieval protocols;
  35.       
  36.       The expression of the name of any object held in a directory system or
  37.       unique naming space on the network;
  38.       
  39.       The distinction to be made easily in the syntax between such protocols
  40.       and directories and name spaces;
  41.       
  42.       New protocols, directories and naming schemes to be included as and when
  43.       they are developed. [1]
  44.       
  45.       Clearly what we are about is defining a language, i.e.  a syntax and
  46.       semantics for communicating some information.
  47.       
  48.       The information is the location and/or identity of some information
  49.       object in the global hypertext. It's a citation or a reference or a
  50.       hypertext link anchor.
  51.       
  52.       I propose a specification for the language of URLs, in the context of a
  53.       specification for a language of global hypertext references.
  54.       
  55.       These global hypertext references include more semantics than just
  56.       differentiating between protocols and accessing data. There are also
  57.       issues of determining the type and the identity of the referent data.
  58.       
  59. SGML as a syntactic specification tool
  60.  
  61.    That's what it's for, after all. What I propose is a DTD that (with the
  62.    default SGML declaration) defines the language of global hypertext
  63.    references.
  64.    
  65.     Some examples of the language:
  66.     
  67.  
  68. <http host="info.cern.ch" path="hypertext/TheProject.html">
  69. <http host="info.cern.ch" path="hypertext/people.html" anchor="timbl">
  70. <http host="info.cern.ch" path="XFIND" search="SGML">
  71.  
  72. <prospero host="archie.mgil.ca" path="pub/ftp">
  73.  
  74. <file host="snoopy" path="~connolly/bin/cgrep.pl" type=appl subtype=x-perl>
  75.  
  76. <ftp host="export.lcs.mit.edu" dir="contrib"
  77. name="XcRichText-1.2.tar.Z">
  78.  
  79. <usenet group="comp.infosystems.gopher">
  80. <usenet article="<abc@convex.com>">
  81.  
  82. <wais host="quake.think.com" database="INFO" search="help">
  83. <wais host="quake.think.com" database="INFO" wtype="TEXT" size=1000
  84.         path="/usr/local/wais/README" >
  85.  
  86. <telnet host="info.cern.ch">
  87.  
  88. <gopher host="boombox.umn.edu" port=70>
  89. <gopher host="boombox.umn.edu" selector="foo "bar"" gtype=0 >
  90.  
  91.    The DTD uses only the most basic features of SGML, and thus the resulting
  92.    language is not very complex. Implementation of a parser for this particular
  93.    SGML language is a vastly more simple task than implementing an SGML parser.
  94.    At the same time, we get the benefits of a rigorously defined language based
  95.    on established standards.
  96.    
  97.   Note:                  I haven't studied the HyTime standard very carefully.
  98.                          I think it's beyond the scope of the task at hand, but
  99.                          I'd like to have that opinion substantiated by someone
  100.                          who really knows. In particular, its Finite Coordinate
  101.                          Systems could be used to model positions within
  102.                          documents: characters, lines, paragraphs.
  103.                          
  104.   RELAVENT ISSUES
  105.   
  106.   Verbosity              This syntax is somewhat verbose, but I think that
  107.                          implicit markup (punctuation rather than names) will
  108.                          lead to a mass of quoting in many cases. And the
  109.                          consistency between schemes is not necessarily very
  110.                          high.
  111.                          
  112.   Long URLs              Extra whitespace between tokens has no effect. There
  113.                          is still the problem of quoted strings that are longer
  114.                          than a mailer allows. Certainly there's some SGML
  115.                          feature that I'm not aware of that addresses the
  116.                          issue.
  117.                          
  118.   I don't believe there's a way to restrict the length of an element, though
  119.                          there is a 960 character limit on the length of an
  120.                          attribute value (in the default SGML declaration).
  121.                          
  122.   Quoting                The SGML numeric character reference (e.g. €)
  123.                          allows an attribute value literal to represent any
  124.                          sequence of bytes.
  125.                          
  126.   NAMELEN                The default SGML declaration specifies that names of
  127.                          elements and attributes be 8 characters or less. It's
  128.                          a conceptually simple matter to operate under an SGML
  129.                          declaration where NAMELEN is higher.
  130.                          
  131.   Extensibility          One problem with the current UDI syntax specification
  132.                          is that it seems to allow new schemes to add arbitrary
  133.                          complexity to the grammar. This specification limits
  134.                          the language to an SMGL start tag.
  135.                          
  136.   If we adopt this spec, we need to give it a public text identifier, and
  137.                          maintain a registry of the names used (probably with
  138.                          the IANA).
  139.                          
  140.   DEPLOYMENT AND USAGE
  141.   
  142.    The first place to try this specification out is in the WWW browser. (I'll
  143.    try to make the code changes if I find time). It's a simple matter of
  144.    elevating UDI's as SGML attributes to URLs as SGML elements. I'd like to
  145.    have someone who really knows SGML to have a look at this DTD and see if it
  146.    can be improved. And I'd like to study the HyTime standard, the Davenport
  147.    DASH, the CFCM standard, etc. to see how this element meshes with their
  148.    citation strategies. Also, it would be nice to have explicit support from
  149.    WAIS and Gopher clients -- drag and drop comes to mind.
  150.    
  151. SGML and semantics
  152.  
  153.    SGML is famous for being divorced from application semantics. Most of the
  154.    semantics of URLs is in the constituent protocols. All we need to do is
  155.    define a way to parse a URL and pass the various bits to the protocol. But
  156.    as long as we're going to all the trouble to gather information accessible
  157.    with all these protocols into one specification, it makes sense to define
  158.    some semantics common to most applications that will use URLs.
  159.    
  160.   DATA TYPES
  161.   
  162.    Some of the schemes have explicit type information (wais, gopher), some have
  163.    implicit typing (html, USENET), and some have no typing at all (file, ftp).
  164.    The MIME content-type system is general and useful enough to warrant
  165.    support. An application should be able to determine the content-type of the
  166.    data regardless of the protocol.
  167.    
  168.   RESOURCE IDENTITY
  169.   
  170.    Many applications have use for determining whether two URLs refer to the
  171.    same information. Various schemes (such as USENET article id's) may have
  172.    semantics for identifying resources. But I think this capability is so
  173.    widely useful that it should be coherently supported for all protocols.
  174.    
  175.                                                             connolly@convex.com
  176. --alt
  177. Content-Type: text/x-html
  178.  
  179. <!DOCTYPE html SYSTEM>
  180. <title>Using SGML to define Universal Resource Locators</title>
  181.  
  182. <H1>Objective</H1>
  183.  
  184. The issue of what to call these things we're defining has been
  185. discussed at length. First it was Universal Document Identifier. The
  186. name has changed as the objective has been refined. The latest name is
  187. Universal Resource Locator. The provisional charter is;
  188.  
  189. <a HREF="x-message-id:<9206262004.AA29919@zippy.lcs.mit.edu>">
  190. <h4>To define a printable string syntax to the allow</h4>
  191.  
  192. <ol>
  193. <li>The expression of the address on the network of any accesable
  194. object using existing information retrieval protocols;
  195.  
  196. <li>The expression of the name of any object held in a directory
  197. system or unique naming space on the network;
  198.  
  199. <li>The distinction to be made easily in the syntax between such
  200. protocols and directories and name spaces;
  201.  
  202. <li>New protocols, directories and naming schemes to be included as
  203. and when they are developed.
  204. </ol>
  205. </a>
  206.  
  207. <p>
  208. Clearly what we are about is defining a language, i.e.  a syntax and
  209. semantics for communicating some information.
  210. <p>
  211.  
  212. The information is the location and/or identity of some information
  213. object in the global hypertext. It's a citation or a reference or a
  214. hypertext link anchor.
  215. <p>
  216.  
  217. I propose a specification for the language of URLs, in the context of
  218. a specification for a language of global hypertext references.
  219. <p>
  220.  
  221. These global hypertext references include more semantics than just
  222. differentiating between protocols and accessing data. There are also
  223. issues of determining the type and the identity of the referent data.
  224.  
  225. <H2>SGML as a syntactic specification tool</H2>
  226.  
  227. That's what it's for, after all. What I propose is a DTD that
  228. (with the default SGML declaration) defines the language of
  229. global hypertext references.
  230. <p>
  231.  
  232. <h4>Some examples of the language:</h4>
  233. <XMP>
  234. <http host="info.cern.ch" path="hypertext/TheProject.html">
  235. <http host="info.cern.ch" path="hypertext/people.html" anchor="timbl">
  236. <http host="info.cern.ch" path="XFIND" search="SGML">
  237.  
  238. <prospero host="archie.mgil.ca" path="pub/ftp">
  239.  
  240. <file host="snoopy" path="~connolly/bin/cgrep.pl" type=appl subtype=x-perl>
  241.  
  242. <ftp host="export.lcs.mit.edu" dir="contrib"
  243. name="XcRichText-1.2.tar.Z">
  244.  
  245. <usenet group="comp.infosystems.gopher">
  246. <usenet article="<abc@convex.com>">
  247.  
  248. <wais host="quake.think.com" database="INFO" search="help">
  249. <wais host="quake.think.com" database="INFO" wtype="TEXT" size=1000
  250.     path="/usr/local/wais/README" >
  251.  
  252. <telnet host="info.cern.ch">
  253.  
  254. <gopher host="boombox.umn.edu" port=70>
  255. <gopher host="boombox.umn.edu" selector="foo "bar"" gtype=0 >
  256. </XMP>
  257.  
  258. The DTD uses only the most basic features of SGML, and thus
  259. the resulting language is not very complex. Implementation
  260. of a parser for this particular SGML language is a vastly
  261. more simple task than implementing an SGML parser.
  262.  
  263. At the same time, we get the benefits of a rigorously
  264. defined language based on established standards.
  265.  
  266. <dl><dt>Note:
  267. <dd>I haven't studied the HyTime standard very
  268. carefully. I think it's beyond the scope of the task at
  269. hand, but I'd like to have that opinion substantiated by someone
  270. who really knows. In particular, its Finite Coordinate Systems
  271. could be used to model positions within documents: characters,
  272. lines, paragraphs.
  273. </dl><p>
  274.  
  275. <h3>Relavent Issues</h3>
  276.  
  277. <dl>
  278. <dt>Verbosity <dd>This syntax is somewhat verbose, but I think that
  279. implicit markup (punctuation rather than names) will lead to a mass of
  280. quoting in many cases. And the consistency between schemes is not
  281. necessarily very high.
  282.  
  283. <dt>Long URLs
  284. <dd>Extra whitespace between tokens has no effect. There is still
  285. the problem of quoted strings that are longer than a mailer allows.
  286. Certainly there's some SGML feature that I'm not aware of that
  287. addresses the issue.
  288. <p>
  289. I don't believe there's a way to restrict the length of an element,
  290. though there is a 960 character limit on the length of an attribute
  291. value (in the default SGML declaration).
  292.  
  293. <dt>Quoting
  294. <dd>The SGML numeric character reference (e.g. €) allows
  295. an attribute value literal to represent any sequence of bytes.
  296.  
  297. <dt>NAMELEN
  298. <dd>The default SGML declaration specifies that names of
  299. elements and attributes be 8 characters or less. It's a
  300. conceptually simple matter to operate under an SGML declaration
  301. where NAMELEN is higher.
  302.  
  303. <dt>Extensibility
  304. <dd>One problem with the current UDI syntax specification is that it
  305. seems to allow new schemes to add arbitrary complexity to the grammar.
  306. This specification limits the language to an SMGL start tag.
  307. <p>
  308. If we adopt this spec, we need to give it a public text identifier,
  309. and maintain a registry of the names used (probably with the IANA).
  310. </dl>
  311.  
  312. <h3>Deployment and Usage</h3>
  313.  
  314. The first place to try this specification out is in the
  315. WWW browser. (I'll try to make the code changes if I find
  316. time). It's a simple matter of elevating UDI's as SGML
  317. attributes to URLs as SGML elements.
  318.  
  319. I'd like to have someone who really knows SGML to have a look
  320. at this DTD and see if it can be improved. And I'd like
  321. to study the HyTime standard, the Davenport DASH, the CFCM
  322. standard, etc. to see how this element meshes with their
  323. citation strategies.
  324.  
  325. Also, it would be nice to have explicit support from WAIS and Gopher
  326. clients -- drag and drop comes to mind.
  327.  
  328. <h2>SGML and semantics</h2>
  329.  
  330. SGML is famous for being divorced from application semantics.
  331. Most of the semantics of URLs is in the constituent protocols.
  332. All we need to do is define a way to parse a URL and pass
  333. the various bits to the protocol.
  334.  
  335. But as long as we're going to all the trouble to gather information
  336. accessible with all these protocols into one specification, it makes
  337. sense to define some semantics common to most applications that will
  338. use URLs.
  339.  
  340. <h3>Data Types</h3>
  341.  
  342. Some of the schemes have explicit type information (wais, gopher),
  343. some have implicit typing (html, USENET), and some have no typing at
  344. all (file, ftp). The MIME content-type system is general and useful
  345. enough to warrant support. An application should be able to determine
  346. the content-type of the data regardless of the protocol.
  347.  
  348. <h3>Resource Identity</h3>
  349.  
  350. Many applications have use for determining whether two URLs refer
  351. to the same information. Various schemes (such as USENET article
  352. id's) may have semantics for identifying resources. But I think this
  353. capability is so widely useful that it should be coherently supported
  354. for all protocols.
  355.  
  356. <address>connolly@convex.com</>
  357. </HTML>
  358.  
  359. --alt--
  360. --cut-here
  361.  
  362. <!-- Universal Resource Locator specification
  363.      derived from http://info.cern.ch/hypertext/WWW/Addressing/BNF.html
  364.      on 24 July 1992
  365.      by connolly@convex.com -->
  366.  
  367. <!-- Typical usage:
  368.     <!DOCTYPE url SYSTEM>
  369.         (we need a public identifier)
  370.     or as part of another SGML document type:
  371.     <!ELEMENT url SYSTEM>
  372.     &url;
  373.     -->
  374.  
  375. <!-- minimization? I believe you can omit the name= part
  376.     of an SGML attribute specification in some circumstances.
  377.     I don't think it works with CDATA attributes because
  378.     order is not significant. -->
  379.  
  380. <!-- news: scheme renames USENET -->
  381. <!-- file: is somewhat vague. I suggest explicit support for FTP: -->
  382. <!ENTITY % schemes "http|file|ftp|usenet|telnet|prospero|gopher|wais">
  383.  
  384. <!ELEMENT url - - (%schemes;)* >
  385. <!-- content model of URL: more than one element in a URL? (obviously
  386.     an application can use multiple URLs. The question is whether
  387.     to define semantics for multiple elements in a single URL.)
  388.  
  389.     Also, what about type, size, search information? Perhaps
  390.     one element should describe the connection information,
  391.     another element or elements describes the path to the data
  392.     (allowing us to define semantics of hierarchical databases)
  393.     and another element defines the type of information there.
  394.  
  395.     -->
  396.  
  397. <!ELEMENT (%schemes;) - O EMPTY >
  398.  
  399. <!-- TCP connection info: internet domain address and port number -->
  400. <!ENTITY % host "host CDATA #REQUIRED" >
  401. <!ENTITY % hostp "%host; port NUMBER #IMPLIED" >
  402.  
  403. <!ENTITY % types "text|image|audio|video|message|multi|appl">
  404. <!ENTITY % stypes "plain|richtext|
  405.     gif|g3fax|
  406.     basic|
  407.     mpeg|
  408.     rfc822|external|partial|
  409.     mixed|altern|parallel|
  410.     octets|ps|oda">
  411. <!-- content-type parameters? -->
  412.  
  413. <!ENTITY % cte "7bit|8bit|qp|base64|binary"
  414.     -- we could define several of the gopher types
  415.        in terms of encodings and types
  416.         e.g. x-binhex, application/x-stuffit
  417.     -->
  418.  
  419. <!ENTITY % MD5 "datasig CDATA #IMPLIED" -- MD5 data signature -->
  420. <!ENTITY % bytes "bytes NUMBER #IMPLIED">
  421. <!ENTITY % lines "lines NUMBER #IMPLIED">
  422.  
  423. <!ATTLIST http
  424.     -- information accessing attributes --
  425.     %hostp;
  426.     path CDATA #REQUIRED -- server local name --
  427.         -- must match xalpha [/ path ] --
  428.         -- can a CDATA attribute contain an arbitrary bytestream? --
  429.     search CDATA #IMPLIED -- search terms --
  430.     anchor CDATA #IMPLIED -- HTML anchor name --
  431.  
  432.     -- information content attributes --
  433.     type (%types) text
  434.     subtype (%stypes) #IMPLIED
  435.     encoding (%cte) 7bit
  436.     %MD5;
  437.     %bytes;
  438.     >
  439.  
  440. <!ATTLIST prospero
  441.     %hostp;
  442.     path CDATA #REQUIRED
  443.     -- prospero path should not be constrained to WWW path syntax --
  444.  
  445.  
  446.     -- information content attributes --
  447.     type (%types) appl
  448.     subtype (%stypes) octets
  449.     encoding (%cte) binary
  450.     %MD5;
  451.     %bytes;
  452.     >
  453.  
  454. <!ATTLIST file
  455.     %host;
  456.     path CDATA #REQUIRED
  457.     -- unix path should not be constrained to WWW path syntax --
  458.  
  459.     -- information content attributes --
  460.     type (%types) appl
  461.     subtype (%stypes) octets
  462.     encoding (%cte) binary
  463.     %MD5;
  464.     %bytes;
  465.     >
  466.  
  467. <!ATTLIST ftp
  468.     %hostp;
  469.     dir CDATA #REQUIRED -- directory for cd command --
  470.     name CDATA #REQUIRED -- name for get command --
  471.     user CDATA "anonymous" -- anonymous ftp by default --
  472.     password CDATA #IMPLIED -- not always needed --
  473.  
  474.     -- information content attributes --
  475.     type (%types) appl
  476.     subtype (%stypes) octets
  477.     encoding (%cte) binary -- use 7bit for ascii transfers --
  478.     %MD5;
  479.     %bytes;
  480.     >
  481.  
  482. <!ATTLIST usenet
  483.     group CDATA #IMPLIED -- usenet newsgroup name --
  484.     article CDATA #IMPLIED -- article message-id --
  485.  
  486.     -- information content attributes --
  487.     type (%types) message
  488.     subtype (%stypes) rfc822
  489.     encoding (%cte) 7bit
  490.     %MD5;
  491.     %lines; -- you can add headers without changing a USENET
  492.             article, so bytes isn't a good measure --
  493.     >
  494.  
  495. <!-- should we split this into two nodes so that
  496.     we can put #REQUIRED on the size and type for documents? -->
  497. <!ATTLIST wais
  498.     %hostp;
  499.     database CDATA #IMPLIED -- WAIS database name --
  500.     search CDATA #IMPLIED -- search terms --
  501.         -- what about relavent documents? --
  502.     wtype CDATA #IMPLIED -- WAIS data type --
  503.         -- this should be obsoleted by the MIME type system --
  504.     bytes NUMBER #IMPLIED
  505.     path CDATA #IMPLIED -- split into original x, y? --
  506.  
  507.     -- information content attributes --
  508.     type (%types) text
  509.     subtype (%stypes) plain
  510.     encoding (%cte) binary
  511.     %MD5;
  512.     >
  513.  
  514. <!ATTLIST telnet
  515.     %hostp;
  516.     user CDATA #IMPLIED -- username --
  517.     >
  518.  
  519. <!ATTLIST gopher
  520.     %hostp;
  521.     gtype CDATA "1" -- gopher type --
  522.         -- again, MIME types should be used --
  523.         -- www browser can be inundated by non-text data
  524.            unless it recognizes other types --
  525.     selector CDATA "" -- gopher object selector --
  526.     search CDATA #IMPLIED -- fulltext search terms --
  527.  
  528.     -- information content attributes --
  529.     type (%types) #IMPLIED
  530.     subtype (%stypes) #IMPLIED
  531.     encoding (%cte) binary
  532.     %MD5;
  533.     %bytes;
  534.     >
  535. --cut-here
  536. Content-type: text/sgml
  537. Content-Description: Example URLs
  538.  
  539. <!DOCTYPE url SYSTEM>
  540. <url>
  541. <http host="info.cern.ch" path="hypertext/TheProject.html">
  542. <http host="info.cern.ch" path="hypertext/people.html" anchor="timbl">
  543. <http host="info.cern.ch" path="XFIND" search="SGML">
  544.  
  545. <prospero host="archie.mgil.ca" path="pub/ftp">
  546.  
  547. <file host="snoopy" path="~connolly/bin/cgrep.pl" type=appl subtype=x-perl>
  548.  
  549. <ftp host="export.lcs.mit.edu" dir="contrib"
  550. name="XcRichText-1.2.tar.Z">
  551.  
  552. <usenet group="comp.infosystems.gopher">
  553. <usenet article="<abc@convex.com>">
  554.  
  555. <wais host="quake.think.com" database="INFO" search="help">
  556. <wais host="quake.think.com" database="INFO" wtype="TEXT" size=1000
  557.     path="/usr/local/wais/README" >
  558.  
  559. <telnet host="info.cern.ch">
  560.  
  561. <gopher host="boombox.umn.edu" port=70>
  562. <gopher host="boombox.umn.edu" selector="foo "bar"" gtype=0 >
  563. </url>
  564.  
  565. --cut-here--